/*
 * SerialComm.h
 *
 * Abstrakte Klasse die mit einer Seriellen Schnittstelle spricht.
 * Zur Verwendung muss von dieser Klasse eine konkrete Klasse
 * abgeleitet werden, in der projektspezifische Parameter übergeben werden.
 *
 *  Created on: 14.10.2008
 *      Author:		Michael Klemm (http://www.michael-klemm.de)
 *      Version:	0.1
 */

#ifndef SERIALCOMM_H_
#define SERIALCOMM_H_

// Anzahl der Bytes bei der Übertragung
#define _1BYTE 1
#define _2BYTE 2
#define _3BYTE 3
#define _4BYTE 4

// EXCEPTIONS
#define FALSE_ARRAY_SIZE	"Array hat die falsche Größe.\n"
#define FALSE_BYTE_SIZE		"Falsche Anzahl an Bytes / Zeichen.\n"
#define READING_DATA		"Konnte nicht von Schnittstelle lesen.\n"
#define WRITING_DATA		"Konnte nicht auf Schnittstelle schreiben.\n"
#define READING_SETTINGS	"Konnte Schnittstelleneinstellungen nicht lesen!\n"
#define WRITING_SETTINGS	"Konnte Schnittstelleneinstellungen nicht schreiben!\n"
#define OPENING_PORT		"Die Schnittstelle konnte nicht geöffnet werden.\n"


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <iostream>
#include <string.h>

#define DATA_LENGTH	_4BYTE
//#define TIO_FLAGS	B19200 | CS8 | CLOCAL | CREAD
#define OPEN_FLAGS	O_RDWR | O_NOCTTY | O_NDELAY

using namespace std;

class SerialComm {

private:

	int fd;
	int data_length;
	//bool crcCheck;
	struct termios tio;

public:

	/**
	 * Standard Ctor
	 */
	SerialComm(const char* device) throw (exception);

	virtual ~SerialComm();

	/**
	 * Sendet eine Zeichenkette
	 * @args char Zu sendende Zeichenkette
	 */
	void send(unsigned char data[]) throw (exception);

	/**
	 * Empfängt Daten von der Schnittstelle
	 */
	void receive(unsigned char data[]) throw (exception);


};

#endif /* SERIALCOMM_H_ */
